package com.banca2.bracketplant.communicate;

import android.os.AsyncTask;

import com.banca2.bracketplant.pojo.BncRequest;
import com.banca2.bracketplant.pojo.BncResponse;
import com.banca2.bracketplant.utils.LogUtil;

/*********************************************************************<br>
 * CommunicationAsyncTask.java										 *<br>
 * 功 能：	执行网络通讯的异步任务											 *<br>
 * 																	 *<br>
 *  Ver   变更日期        负责人  					变更内容                        			 *<br>
 * ───────────────────────────────────────────────────────────────── *<br>
 * V0.01 2015-6-1	ZQ      				    创建					 *<br>
 * 																	 *<br>
 * Copyright (c) 2015 StarFollower Corporation. All rights reserved. *<br>
 *┌─────────────────────────────────────────────────────────────────┐*<br>
 *│　此技术信息为本团队机密信息，未经本团队书面同意禁止向第三方披露．　				│*<br>
 *│　版权所有：StarFollower　　　　　　　　　　                     　					│*<br>
 *└─────────────────────────────────────────────────────────────────┘*<br>
 *********************************************************************/
public class CommunicationAsyncTask 
		extends AsyncTask<BncRequest, Boolean, BncResponse> {
	
	private BncRequest bncRequest;

	@Override
	protected BncResponse doInBackground(BncRequest... args) {
		LogUtil.v(this, "doInBackground(BncRequest... args) - start");
		if (null != args && null != args[0] && null != args[0].getRequestType()) {
			bncRequest = args[0];
			// 在UI线程中显示“正在载入中”用户界面
			this.publishProgress(true);
			// 在工作线程中执行通讯操作
			BncResponse result =  HttpHelper.doRequest(bncRequest.isPost(),
					bncRequest.getRequestType(), bncRequest.getParams());
			// 通讯结束，在UI线程中显示通讯结果
			LogUtil.v(this, "doInBackground(BncRequest... args) - end");
			return result;
		}

		LogUtil.d(this, "doInBackground(BncRequest... args) - 参数非法，不执行任何操作 - end");
		return null;
	}// doInBackground

	@Override
	protected void onPostExecute(BncResponse result) {
		LogUtil.v(this, "onPostExecute(BncResponse) - start");
		super.onPostExecute(result);
		
		if(null != result){
			// 交由处理服务器响应的回调对象处理通讯结果
			this.bncRequest.getProcessor().processData(result);
			// 停止显示“正在载入”页面
			this.publishProgress(false);
		} else {
			LogUtil.d(this, "onPostExecute(BncResponse) - null==result");
		}

		LogUtil.v(this, "onPostExecute(BncResponse) - end");
	}//onPostExecute

	@Override
	protected void onProgressUpdate(Boolean... values) {
		LogUtil.v(this, "onProgressUpdate(Boolean...) - start");
		super.onProgressUpdate(values);
		
		if(null != values
				&& null != values[0]
				&& null != bncRequest.getProcessor()) {
			if(values[0]){
				// 在UI线程中显示“正在载入”用户界面
				if(! bncRequest.getProcessor().isLoading()){
					LogUtil.v(this, "onProgressUpdate(Boolean...) - 即将显示“正在载入”界面。。。");
					bncRequest.getProcessor().showLoading();
				} else {
					LogUtil.v(this, "onProgressUpdate(Boolean...) - 正在显示“正在载入”界面，放弃重复显示请求");
				}
			} else {
				// 在UI线程中停止显示“正在载入”用户界面
				if(bncRequest.getProcessor().isLoading()){
					LogUtil.v(this, "onProgressUpdate(Boolean...) - 即将停止显示“正在载入”界面。。。");
					bncRequest.getProcessor().hideLodding();
				} else {
					LogUtil.v(this, "onProgressUpdate(Boolean...) - 尚未显示“正在载入”界面，放弃终止显示请求");
				}
			}
		} else {
			LogUtil.d(this, "onProgressUpdate(Boolean...) - 参数非法或未指定应答响应对象，未执行任何操作");
		}

		LogUtil.v(this, "onProgressUpdate(Boolean...) - end");
	}//onProgressUpdate

}
